package com.gitee.mrj.aiboot.annotation.config.sf.ui.widget;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface SFUploadWidget {


    /**
     * 上传类型，默认：`select`
     */
    Type type() default Type.SELECT;

    /**
     * 按钮文本，默认：`点击上传`
     */
    String text() default "";

    /**
     * 提醒文本，drag 时有效，默认：`支持单个或批量，严禁上传公司数据或其他安全文件`
     */
    String hint() default "";

    /**
     * 重命名返回参数，支持 `a.b.c` 的嵌套写法，若不指定表示整个返回体
     */
    String resReName() default "";

    /**
     * 重命名预览图像URL返回参数，支持 `a.b.c` 的嵌套写法，若不指定表示使用文件对象的 `url`、`thumbUrl` 值
     */
    String urlReName() default "";

    /**
     * **必选参数** 上传的地址
     */
    String action() default "";

    /**
     * 接受上传的文件类型, 详见 [input accept Attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept)
     */
    String[] accept() default {};

    /**
     * 限制单次最多上传数量，`multiple` 打开时有效；`0` 表示不限，默认：`0`
     */
    int limit() default Integer.MIN_VALUE;

    /**
     * 限制上传文件数量，超过数量隐藏上传按钮
     */
    int limitFileCount() default Integer.MIN_VALUE;


    /**
     * 限制文件大小，单位：KB；`0` 表示不限，默认：`0`
     */
    int fileSize() default Integer.MIN_VALUE;

    /**
     * 限制文件类型，例如：`image/png,image/jpeg,image/gif,image/bmp`
     */
    String fileType() default "";


    /**
     * 上传列表的内建样式，默认：`text`
     */
    ListType listType() default ListType.TEXT;

    /**
     * 是否展示列表, 可设为一个对象，用于单独设定 `showPreviewIcon` 和 `showRemoveIcon`，默认：`true`
     */
    boolean showUploadList() default true;

    /**
     * 是否支持多选文件，`IE10+` 支持。开启后按住 `ctrl` 可选择多个文件，默认：`false`
     */
    boolean multiple() default false;

    /**
     * 发到后台的文件参数名，默认：`file`
     */
    String name() default "";


    /**
     * 上传请求时是否携带 cookie，默认：`false`
     */
    boolean withCredentials() default false;

    /**
     * 支持上传文件夹（[caniuse](https://caniuse.com/#feat=input-file-directory)），默认：`false`
     */
    boolean directory() default false;

    /**
     * 点击打开文件对话框，默认：`true`
     */
    boolean openFileDialogOnClick() default true;

    public enum Type {
        SELECT("select"),
        DRAG("drag");

        private final String type;

        Type(String type) {
            this.type = type;
        }
    }

    public enum ListType {
        TEXT("text"),
        PICTURE("picture"),
        PICTURECARD("picture-card");

        private final String type;

        ListType(String type) {
            this.type = type;
        }
    }


}
